/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Dao;

import Beans.ProductoBean;
import Conexion.Conexion;
import java.sql.ResultSet;
import java.util.Vector;

/**
 *
 * @author acorzo
 */
public class ProductoDAO {

    // Atributos de la Clase
    public static final String GET_DATOS_PRODUCTOS="SELECT "+
                                                        "cpro.claveProducto As claveProducto,"+
                                                        "cpro.nombreProducto As nombreProducto,"+
                                                        "ccat.nombreCategoria As nombreCategoria,"+
                                                        "cmar.nombreMarca As nombreMarca,"+
                                                        "cpro.min As stockMinimo,"+
                                                        "cpro.max As stockMaximo,"+
                                                        "cpro.precioCosto As precioCosto,"+
                                                        "cpro.idProducto As idProducto " +
                                                    "FROM "+
                                                        "cat_productos cpro,"+
                                                        "cat_categorias ccat,"+
                                                        "cat_marcas cmar "+
                                                    "WHERE "+
                                                        "cpro.idCategoria=ccat.idCategoria AND "+
                                                        "cpro.idMarca=cmar.idMarca AND "+
                                                        "cpro.idEstado=1;";
    public static final String INSERTA_DATOS_PRODUCTO="INSERT INTO cat_productos (claveProducto,nombreProducto,idProveedor,idLineaProducto,idCategoria,idMarca,idIva,precioCosto,max,min,precioVenta,descuento,precioVentaIva,fechaAlta,idEstado) VALUES ";
    public static final String ACTUALIZA_DATOS_PRODUCTO="UPDATE cat_productos SET";
    public static final String ELIMINA_DATOS_PRODUCTO="UPDATE cat_productos SET";
    public static final String GET_NEXT_ID_PRODUCTO="SELECT auto_increment FROM information_schema.tables WHERE table_schema='bd_pegaso' AND table_name='cat_productos';";
    public static final String GET_DATOS_PRODUCTOS_ACTIVOS="SELECT "+
                                                                "cpro.claveProducto As claveProducto,"+
                                                                "cpro.nombreProducto As nombreProducto,"+
                                                                "ccat.nombreCategoria As nombreCategoria,"+
                                                                "cmar.nombreMarca As nombreMarca,"+
                                                                "cpro.min As stockMinimo,"+
                                                                "cpro.max As stockMaximo,"+
                                                                "cpro.precioCosto As precioCosto,"+
                                                                "cpro.idProducto As idProducto "+
                                                           "FROM "+
                                                                "cat_productos cpro,"+
                                                                "cat_categorias ccat,"+
                                                                "cat_marcas cmar "+
                                                           "WHERE "+
                                                                "cpro.idCategoria=ccat.idCategoria AND "+
                                                                "cpro.idMarca=cmar.idMarca AND "+
                                                                "cpro.idEstado=1";
    public static final String GET_DATOS_PRODUCTO="SELECT "+
                                                        "cpro.claveProducto As claveProducto,"+
                                                        "cpro.nombreProducto As nombreProducto,"+
                                                        "cpro.idProveedor As idProveedor,"+
                                                        "cpro.idLineaProducto As idLineaProducto,"+
                                                        "cpro.idCategoria As idCategoria,"+
                                                        "cpro.idMarca As idMarca,"+
                                                        "cpro.max As max,"+
                                                        "cpro.min As min,"+
                                                        "cpro.precioCosto As precioCosto,"+
                                                        "cpro.idIva As idIva,"+
                                                        "cpro.precioVenta As precioVenta,"+
                                                        "cpro.descuento As descuento,"+
                                                        "cpro.precioVentaIva As precioVentaIva "+
                                                  "FROM "+
                                                        "cat_productos cpro ";
    public static final String GET_DATOS_PRODUCTO_NOMBRE_CODIGO="SELECT claveProducto,nombreProducto,max,idProducto FROM cat_productos WHERE idEstado=1";
    public static final String GET_DATOS_PRODUCTO_VENTA="SELECT "+
                                                                "cp.claveProducto As codigo,"+
                                                                "cm.nombreMarca As marca,"+
                                                                "cp.nombreProducto As producto,"+
                                                                "cp.precioVenta As precioVenta,"+
                                                                "cp.descuento As descuento,"+
                                                                "ci.iva As iva,"+
                                                                "cp.max As existencia,"+
                                                                "cp.idProducto As idProducto "+
                                                        "FROM "+
                                                                "cat_productos cp,"+
                                                                "cat_marcas cm,"+
                                                                "cat_iva ci "+
                                                        "WHERE " +
                                                                "cp.idMarca=cm.idMarca AND "+
                                                                "cp.idIva=ci.idIva AND "+
                                                                "cp.idProducto=";
    //public static final String GET_DATOS_PRODUCTO_COMPRA="SELECT nombreProducto,precioCosto,idProducto FROM cat_productos ";
    public static final String GET_DATOS_PRODUCTO_COMPRA="SELECT "+
                                                                "pr.nombreProducto As nombreProducto,"+
                                                                "pr.precioCosto As precioCosto,"+
                                                                "pr.idProducto As idProducto,"+
                                                                "iv.iva As iva "+
                                                        "FROM "+
                                                                "cat_productos pr,"+
                                                                "cat_iva iv "+
                                                        "WHERE " +
                                                                "pr.idEstado = iv.idEstado AND ";
//                                                                "pr.idIva=iv.idIva AND "+"";


    // Metodos Publicos
    // Insertamos los Datos del Producto
    public Vector insertaDatosProducto(ProductoBean productoBean, Conexion conect){
        // Variables Locales
        Vector resultDatos=new Vector();

        // Insertamos los Datos del Producto
        try {
            conect.getPreparedStatement().execute(INSERTA_DATOS_PRODUCTO+
                    "('"+productoBean.getClaveProducto()+"'"+
                    ",'"+productoBean.getNombreProducto()+"'"+
                    ","+productoBean.getIdProveedor()+
                    ","+productoBean.getIdLineaProducto()+
                    ","+productoBean.getIdCategoria()+
                    ","+productoBean.getIdMarca()+
                    ","+productoBean.getIdIva()+
                    ","+productoBean.getPrecioCosto()+
                    ","+productoBean.getMax()+
                    ","+productoBean.getMin()+
                    ","+productoBean.getPrecioVenta()+
                    ","+productoBean.getDescuento()+
                    ","+productoBean.getPrecioVentaIva()+
                    ",NOW()"+
                    ",1)");
            resultDatos.add("OK");
        } catch (Exception e) {
            resultDatos.add("ERROR");
            // Mensaje en Consola
            System.out.println("ERROR :"+e);
        }
        // Retornamos el Valor
        return resultDatos;
    }

    // Actualizamos los Datos del Producto
    public Vector actualizaDatosProducto(ProductoBean productoBean, Conexion conect){
        // Variables Locales
        Vector resultDatos=new Vector();

        // Actualizamos los Datos del Producto
        try {
            conect.getPreparedStatement().execute(ACTUALIZA_DATOS_PRODUCTO+
                    " claveProducto='"+productoBean.getClaveProducto()+"'"+
                    ",nombreProducto='"+productoBean.getNombreProducto()+"'"+
                    ",idProveedor="+productoBean.getIdProveedor()+
                    ",idLineaProducto="+productoBean.getIdLineaProducto()+
                    ",idCategoria="+productoBean.getIdCategoria()+
                    ",idMarca="+productoBean.getIdMarca()+
                    ",max="+productoBean.getMax()+
                    ",min="+productoBean.getMin()+
                    ",precioCosto="+productoBean.getPrecioCosto()+
                    ",idIva="+productoBean.getIdIva()+
                    ",precioVenta="+productoBean.getPrecioVenta()+
                    ",descuento="+productoBean.getDescuento()+
                    ",precioVentaIva="+productoBean.getPrecioVentaIva()+
                    ",fechaModificacion=NOW()"+
                    " WHERE idProducto="+productoBean.getIdProducto());
            resultDatos.add("OK");
        } catch (Exception e) {
            resultDatos.add("ERROR");
            // Mensaje en Consola
            System.out.println("ERROR :"+e);
        }
        // Retornamos el Valor
        return resultDatos;
    }

    // Eliminamos los Datos del Producto
    public Vector eliminaDatosProducto(ProductoBean productoBean, Conexion conect){
        // Variables Locales
        Vector resultDatos=new Vector();

        // Eliminamos los Datos del Producto
        try {
            conect.getPreparedStatement().execute(ELIMINA_DATOS_PRODUCTO+
                    " idEstado=2"+
                    ",fechaModificacion=NOW()"+
                    " WHERE idProducto="+productoBean.getIdProducto());
            resultDatos.add("OK");
        } catch (Exception e) {
            resultDatos.add("ERROR");
            // Mensaje en Consola
            System.out.println("ERROR :"+e);
        }
        // Retornamos el Valor
        return resultDatos;
    }

    // Obtenemos Datos de Productos
    public Vector getDatosProductos(ProductoBean productoBean,Conexion conect){
        // Variables Locales
        Vector resultDatos=new Vector();

        // Obtenemos los Datos de los Productos
        try {
            ResultSet resultSet=conect.getPreparedStatement().executeQuery(GET_DATOS_PRODUCTOS);
            while(resultSet.next()){
                ProductoBean getDatosProductos=new ProductoBean();
                getDatosProductos.setClaveProducto(resultSet.getString("claveProducto"));
                getDatosProductos.setNombreProducto(resultSet.getString("nombreProducto"));
                getDatosProductos.setDesCategoria(resultSet.getString("nombreCategoria"));
                getDatosProductos.setDesMarca(resultSet.getString("nombreMarca"));
                getDatosProductos.setMin(resultSet.getString("stockMinimo"));
                getDatosProductos.setMax(resultSet.getString("stockMaximo"));
                getDatosProductos.setPrecioCosto(resultSet.getString("precioCosto"));
                getDatosProductos.setIdProducto(resultSet.getString("idProducto"));
                resultDatos.add(getDatosProductos);
            }
        } catch (Exception e) {
            // Mensaje en Consola
            System.out.println("ERROR : " + e);
        }
        // Retornamos el Valor
        return resultDatos;
    }

    // Obtenemos el Siguiente Id Producto a Asignar
    public Vector getDatosProductosNextId(ProductoBean productoBean, Conexion conect){
        // Variables Locales
        Vector resultDatos=new Vector();

        // Obtenemos el Siguiente Id Producto a Asignar
        try {
            ResultSet resultSet=conect.getPreparedStatement().executeQuery(GET_NEXT_ID_PRODUCTO);
            while(resultSet.next()){
                ProductoBean getDatosProductos=new ProductoBean();
                getDatosProductos.setIdProducto(resultSet.getString("auto_increment"));
                resultDatos.add(getDatosProductos);
            }
        } catch (Exception e) {
            // Mensaje en Consola
            System.out.println("ERROR :"+e);
        }
        // Retornamos el Valor
        return resultDatos;
    }

    // Busqueda de Productos Registrados con Estatus Activo (1)
    public Vector buscarDatosProductoActivo(ProductoBean productoBean, Conexion conect){
        // Variables Locales
        Vector resultDatos=new Vector();
        String filtro="";

        // Buscamos los Productos Registrados
        try {
            // Evaluamos Filtros de Busqueda
            // Clave
            if (!productoBean.getClaveProducto().equalsIgnoreCase("")){
                // Vaciamos el Filtro
                filtro=filtro+" AND cpro.claveProducto LIKE '%"+productoBean.getClaveProducto()+"%'";
            }
            // Nombre Producto
            if (!productoBean.getNombreProducto().equalsIgnoreCase("")){
                // Vaciamos el Filtro
                filtro=filtro+" AND cpro.nombreProducto LIKE '%"+productoBean.getNombreProducto()+"%'";
            }
            // Proveedor
            if (!productoBean.getIdProveedor().equalsIgnoreCase("0")){
                // Vaciamos el Filtro
                filtro=filtro+" AND cpro.idProveedor="+productoBean.getIdProveedor();
            }
            // Linea Producto
            if (!productoBean.getIdLineaProducto().equalsIgnoreCase("0")){
                // Vaciamos el Filtro
                filtro=filtro+" AND cpro.idLineaProducto="+productoBean.getIdLineaProducto();
            }
            // Categoria
            if (!productoBean.getIdCategoria().equalsIgnoreCase("0")){
                // Vaciamos el Filtro
                filtro=filtro+" AND cpro.idCategoria="+productoBean.getIdCategoria();
            }
            // Marca
            if (!productoBean.getIdMarca().equalsIgnoreCase("0")){
                // Vaciamos el Filtro
                filtro=filtro+" AND cpro.idMarca="+productoBean.getIdMarca();
            }
            System.out.println(GET_DATOS_PRODUCTOS_ACTIVOS+filtro);
            ResultSet resultSet=conect.getPreparedStatement().executeQuery(GET_DATOS_PRODUCTOS_ACTIVOS+filtro);
            while(resultSet.next()){
                ProductoBean getDatosProductos=new ProductoBean();
                getDatosProductos.setClaveProducto(resultSet.getString("claveProducto"));
                getDatosProductos.setNombreProducto(resultSet.getString("nombreProducto"));
                getDatosProductos.setDesCategoria(resultSet.getString("nombreCategoria"));
                getDatosProductos.setDesMarca(resultSet.getString("nombreMarca"));
                getDatosProductos.setMin(resultSet.getString("stockMinimo"));
                getDatosProductos.setMax(resultSet.getString("stockMaximo"));
                getDatosProductos.setPrecioCosto(resultSet.getString("precioCosto"));
                getDatosProductos.setIdProducto(resultSet.getString("idProducto"));
                resultDatos.add(getDatosProductos);
            }
        } catch (Exception e) {
            // Mensaje en Consola
            System.out.println("ERROR :"+e);
        }
        // Retornamos el Valor
        return resultDatos;
    }

    // Obtenemos los Datos del Producto
    public Vector getDatosProducto(ProductoBean productoBean, Conexion conect){
        // Variables Locales
        Vector resultDatos=new Vector();

        // Obtenemos los Datos del Producto
        try {
            ResultSet resultSet=conect.getPreparedStatement().executeQuery(GET_DATOS_PRODUCTO+
                    "WHERE idProducto="+productoBean.getIdProducto());
            while(resultSet.next()){
                ProductoBean getDatosProductos=new ProductoBean();
                getDatosProductos.setClaveProducto(resultSet.getString("claveProducto"));
                getDatosProductos.setNombreProducto(resultSet.getString("nombreProducto"));
                getDatosProductos.setIdProveedor(resultSet.getString("idProveedor"));
                getDatosProductos.setIdLineaProducto(resultSet.getString("idLineaProducto"));
                getDatosProductos.setIdCategoria(resultSet.getString("idCategoria"));
                getDatosProductos.setIdMarca(resultSet.getString("idMarca"));
                getDatosProductos.setMax(resultSet.getString("max"));
                getDatosProductos.setMin(resultSet.getString("min"));
                getDatosProductos.setPrecioCosto(resultSet.getString("precioCosto"));
                getDatosProductos.setIdIva(resultSet.getString("idIva"));
                getDatosProductos.setPrecioVenta(resultSet.getString("precioVenta"));
                getDatosProductos.setDescuento(resultSet.getString("descuento"));
                getDatosProductos.setPrecioVentaIva(resultSet.getString("precioVentaIva"));
                resultDatos.add(getDatosProductos);
            }
        } catch (Exception e) {
            // Mensaje en Consola
            System.out.println("ERROR :"+e);
        }
        // Retornamos el Valor
        return resultDatos;
    }

    // Obtenemos los Datos de los Productos por Nombre y Codigo
    public Vector getDatosProductosByNombreCodigo(ProductoBean productoBean, Conexion conect){
        // Variables Locales
        Vector resultDatos=new Vector();
        String filtro="";

        // Evaluamos el Filtro
        // Nombre Producto
        if (!productoBean.getNombreProducto().equalsIgnoreCase("")){
            // Vaciamos el Filtro
            filtro=filtro+" AND nombreProducto LIKE '%"+productoBean.getNombreProducto()+"%'";
        }

        // Codigo Producto
        if (!productoBean.getClaveProducto().equalsIgnoreCase("")){
            // Vaciamos el Filtro
            filtro=filtro+" AND claveProducto LIKE '%"+productoBean.getClaveProducto()+"%'";
        }

        // Obtenemos los Productos por Nombre y Codigo
        try {
            System.out.println(GET_DATOS_PRODUCTO_NOMBRE_CODIGO+filtro);
            ResultSet resultSet=conect.getPreparedStatement().executeQuery(GET_DATOS_PRODUCTO_NOMBRE_CODIGO+filtro);
            while(resultSet.next()){
                ProductoBean getDatosProductos=new ProductoBean();
                getDatosProductos.setClaveProducto(resultSet.getString("claveProducto"));
                getDatosProductos.setNombreProducto(resultSet.getString("nombreProducto"));
                getDatosProductos.setMax(resultSet.getString("max"));
                getDatosProductos.setIdProducto(resultSet.getString("idProducto"));
                resultDatos.add(getDatosProductos);
            }
        } catch (Exception e) {
            // Mensaje en Consola
            System.out.println("ERROR :"+e);
        }
        // Retornamos el Valor
        return resultDatos;
    }

    // Obtenemos los Datos del Producto a Vender
    public Vector getDatosProductoVentaByIdProducto(ProductoBean productoBean, Conexion conect){
        // Variables Locales
        Vector resultDatos=new Vector();

        // Obtenemos los Datos del Producto a Vender
        try {
            ResultSet resultSet=conect.getPreparedStatement().executeQuery(GET_DATOS_PRODUCTO_VENTA+productoBean.getIdProducto());
            while(resultSet.next()){
                ProductoBean getDatosProductos=new ProductoBean();
                getDatosProductos.setClaveProducto(resultSet.getString("codigo"));
                getDatosProductos.setDesMarca(resultSet.getString("marca"));
                getDatosProductos.setNombreProducto(resultSet.getString("producto"));
                getDatosProductos.setPrecioVenta(resultSet.getString("precioVenta"));
                getDatosProductos.setDescuento(resultSet.getString("descuento"));
                getDatosProductos.setIva(resultSet.getString("iva"));
                getDatosProductos.setMax(resultSet.getString("existencia"));
                getDatosProductos.setIdProducto(resultSet.getString("idProducto"));
                resultDatos.add(getDatosProductos);
            }
        } catch (Exception e) {
            // Mensaje en Consola
            System.out.println("ERROR :"+e);
        }
        // Retornamos el Valor
        return resultDatos;
    }

    // Buscar producto por clave de producto en modulo compra
    public Vector buscarProductoByCompra(ProductoBean productoBean, Conexion conect){
        // Variables Locales
        Vector resultDatos=new Vector();
//         
        // Buscamos el producto por clave
        try {
            ResultSet resultSet=conect.getPreparedStatement().executeQuery(GET_DATOS_PRODUCTO_COMPRA+
                    " claveProducto = " + productoBean.getClaveProducto() + " AND pr.idEstado = 1 " + " AND  iv.idIva = pr.idIva ");
//             System.out.println( "result .... " +  (GET_DATOS_PRODUCTO_COMPRA+
//                    " claveProducto = " + productoBean.getClaveProducto() + " AND pr.idEstado = 1 " + " AND  iv.idIva = pr.idIva ") );
            while(resultSet.next()){
                ProductoBean getDatosProductoClaveForCompra=new ProductoBean();
                getDatosProductoClaveForCompra.setNombreProducto(resultSet.getString("nombreProducto"));
                getDatosProductoClaveForCompra.setPrecioCosto(resultSet.getString("precioCosto"));
                getDatosProductoClaveForCompra.setIdProducto(resultSet.getString("idProducto"));
                getDatosProductoClaveForCompra.setIva(resultSet.getString("iva"));

                resultDatos.add(getDatosProductoClaveForCompra);
            }
        } catch (Exception e) {
            // Mensaje en Consola
            System.out.println("ERROR :"+ e);
        }
        // Retornamos el Valor
        return resultDatos;
    }
}
